
/**
  ******************************************************************************
  * @file    stringx.h
  * @author  Dragon.Chen
  * @version V1.6.0
  * @date    04-27-2018
  * @brief   字符串高级操作函数接口
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; COPYRIGHT 2018 上海今中网络科技有限公司 </center></h2>
  ******************************************************************************
  */
#include "basement.h"
#ifdef USE_LINUX
#include <string.h>
#endif

//****************patched by yagamishi add*************2016/02/09*******
/** Defines and Macros */
#define MATCH               1
#define NOT_MATCH           0

#define IGONRE_CASE 	    1
#define UNIGONRE_CASE 	    0


/// 匹配一个字符的宏
#define MATCH_CHAR(c1,c2,ignore_case)  ( (c1==c2) || ((ignore_case==1) &&(tolower(c1)==tolower(c2))) )
//************************************************************************


/**
  * @brief      判断字符串是否以指定字符串开始
  * @param      arg1、源字符串；arg2、子字符串
  * @retval     1、是以指定字符串开始；0、不是；-1、子字符串超越源字符串长度
  */
int start_with(const char *ptr_src, const char *start_str);

/**
  * @brief      判断字符串是否以指定字符串结束
  * @param      arg1、源字符串；arg2、子字符串
  * @retval     1、是以指定字符串结束；0、不是；-1、子字符串超越源字符串长度
  */
int end_with(const char *ptr_src, const char *end_str);

/**
  * @brief      截取指定字符后的最后字符串
  * @param      arg1、最后字符串；arg2、源字符串；arg3、拆分符
  * @retval     最后字符串
  * @attention  src必须是字符串数组
  */
char *get_last_str_by_token(char *last_str, char *src, const char *token);

/**
  * @brief      截取指定字符后的第一个字符串
  * @param      arg1、最后字符串；arg2、源字符串；arg3、拆分符
  * @retval     最后字符串
  * @attention  src必须是字符串数组
  */
char *get_first_str_by_token(char *first_str, char *src, const char *token);

/**
  * @brief      获取src前len个长度字符数组中指定字符出现的次数
  * @param      arg1、源字符串；arg2、待检测的字符；arg3、指定的长度
  * @retval     返回指定字符出现的次数
  */
int get_count_specified_char(const char *src, const char ch, int len);

/**
  * @brief      用于判断目标字符串是否是源字符串子字符串
  * @param      arg1、源字符串；arg2、待检测的字符
  * @retval     是返回1，否则返回-1
  */
int contains(const char *source, const char *target);

/**
  * @brief      源字符串包含目标字符串的次数
  * @param      arg1、源字符串；arg2、待检测的字符
  * @retval     正常返回包含的次数(>0)，否则返回-1
  */
int containc(const char *src, const char *dst);

/**
  * @brief      获取子字符串
  * @param      arg1、目标字符串； arg2、 目标字符串大小 arg3、源字符串；arg4、字符串开始位置；arg5字符串结束位置
  * @retval     成功返回子字符串，失败返回NULL
  */
char *substr(char *dst, int size, const char *src, int begin, int end);

/**
  * @brief      获取子字符串
  * @param      arg1、目标字符串  arg2、 目标字符串大小  arg3、源字符串  arg4、字符串开始位置
  * @retval     成功返回子字符串，失败返回NULL
  */
char *substr_by_start_position(char *dst, int size, const char *src, int begin);

/**
  * @brief      去除字符串的首尾空格和回车
  * @param      arg1、目标字符串  arg2、 目标字符串大小  arg3、源字符串
  * @retval     成功返回去除空格的字符串
  * @attention  如果处理完成的字符串大于提供的缓冲区大小时，返回缓冲区大小的字符串
  */
char *trim(char *dst, int size, const char *src);


//****************patched by yagamishi add*************2016/02/11*******

/**
  * @brief  通配符匹配算法
  * @param
  * @retval
  */
int match(char *regexp, char *text);

/**
  * @brief      字符串替换函数,能替换所有的要替换的字符串,被替换的字符串和替换的字符串不一定一样长.
  * @param      pDstOut,输出字符串 pSrcIn,输入字符串 pSrcRpl,被替换的字符串 pDstRpl,替换后的字符串
  * @retval
  * @note        pDstOut,输出字符串,要保证足够的空间可以存储替换后的字符串.以上的字符串均要以 '\0 '结尾.
  */
void str_rpl(char* pDstOut, char* pSrcIn, const char* pSrcRpl, const char* pDstRpl);

/**
  * @brief  通配符匹配算法
  * @param  src,字符串 pattern,有通配符( * 或 ? 号)的字符串 ignore_case,是否区分大小写,1表示不区分,0表示区分
  * @retval 1,表示匹配 0,表示不匹配
  */
int wild_char_match(char *src, char *pattern, int ignore_case);

/**
  * @brief    得到最后个字符串
  * @param	  arg1:源字符串 arg2:分割符 arg3最后得到的字符串
  * @retval
  */
void get_last_str(char * src,char * token,char *last_str);

/**
  * @brief    去除最后个\n字符
  * @param	  arg:字符串，修改后直接使用buf字符串
  * @retval
  */
void str_del_enter(char *buf);
//************************************************************************


/******************* (C) COPYRIGHT 2018 上海今中网络科技有限公司 *****END OF FILE****/
